package com.jijuxie.house.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jijuxie.house.domain.HouseAssign;
import com.jijuxie.house.domain.HouseInfo;
import com.jijuxie.house.domain.vo.HouseAssignVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * 房源分配服务接口
 * 
 * @author jijuxie
 */
public interface IHouseAssignService extends IService<HouseAssign> {

    /**
     * 获取分配列表（分页查询）
     * 
     * @param params 查询参数
     * @return 分页结果
     */
    Page<HouseAssignVO> getAssignList(Map<String, Object> params);

    /**
     * 自动分配房源给经纪人
     * 
     * @param houseId 房源ID
     * @return 分配结果
     */
    @Transactional(rollbackFor = Exception.class)
    boolean autoAssignHouse(Long houseId);

    /**
     * 手动指定经纪人负责房源
     * 
     * @param houseId 房源ID
     * @param agentId 经纪人ID
     * @param operatorId 操作人ID
     * @param remark 备注信息
     * @return 分配结果
     */
    @Transactional(rollbackFor = Exception.class)
    boolean manualAssignHouse(Long houseId, Long agentId, Long operatorId, String remark);

    /**
     * 取消房源分配
     * 
     * @param houseId 房源ID
     * @param agentId 经纪人ID
     * @return 取消结果
     */
    boolean cancelAssign(Long houseId, Long agentId);

    /**
     * 获取房源分配情况
     * 
     * @param houseId 房源ID
     * @return 分配列表
     */
    List<HouseAssignVO> getHouseAssignList(Long houseId);

    /**
     * 获取经纪人负责的房源列表
     * 
     * @param page 分页参数
     * @param agentId 经纪人ID
     * @return 房源分页列表
     */
    Page<HouseAssignVO> getAgentHouseList(Page<HouseAssignVO> page, Long agentId);
    
    /**
     * 获取待分配的房源列表
     * 
     * @return 未分配的房源列表
     */
    List<HouseInfo> getUnassignedHouses();
    
    /**
     * 分页获取待分配的房源列表
     * 
     * @param page 分页参数
     * @return 未分配的房源分页列表
     */
    Page<HouseInfo> getUnassignedHousesPage(Page<HouseInfo> page);
} 